Einrichten von SSL beim Apache 2.x unter SuSE Linux

 

Das Modul ssl ist im Apache 2.x nicht mehr separat zu installieren, sondern bereits im Lieferumfang enthalten, das Modul muss nur in den entsprechenden LoadModule und Include-Abschnitten geladen werden.

Wir führen alle Schritte als user root durch, und gehen z.B. davon aus, dass wir uns im Verzeichnis /root befinden.

Zunächst muss ein Zertifikat erzeugt werden (bitte passen die die Verzeichnisnamen jeweils an Ihr OpenSSL-Paket an):

/usr/share/ssl/misc/CA.sh -newca

Sie geben ein Passwort ein und die jeweiligen Angaben (Land, Organisation etc.). Beim "Common Name" muss der DNS-Servername des Webservers angegeben werden - dies ist wichtig, denn sonst erhalten die Anwender beim Aufruf der Seit eine Warnung, die ungefähr so aussieht:

 . Ein Challenge Passwort ist erst einmal nicht notwendig. Am Ende der Prozedur muss man noch einmal das eingegebene Passwort eingeben.

 

Ein Beispiel

mercury:~ # /usr/share/ssl/misc/CA.sh -newca
CA certificate filename (or enter to create)

Making CA certificate ...
Generating a 1024 bit RSA private key
...................................++++++
..............++++++
writing new private key to './demoCA/private/./cakey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:DE
State or Province Name (full name) [Some-State]:NRW
Locality Name (eg, city) []:Wuppertal
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Memtext
Organizational Unit Name (eg, section) []:Workshop
Common Name (eg, YOUR name) []:192.168.0.108
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/./cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 0 (0x0)
        Validity
            Not Before: Mar 13 13:22:45 2007 GMT
            Not After : Mar 12 13:22:45 2010 GMT
        Subject:
... 

Certificate is to be certified until Mar 12 13:22:45 2010 GMT (1095 days)

Write out database with 1 new entries
Data Base Updated

Das öffentliche CA-Zertifikat liegt nun in /root/demoCA/cacert.pem und der private Schlüssel liegt in /root/demoCA/private/cakey.pem..

Nun werden die Schlüssel dem Apache2 bekannt gemacht. Die einzelnen Konfigurationsparameter werden bei SuSE Linux über die Sysconfig gesetzt:

Apache2 mit SSL
unter SuSE Linux

SuSE-typisch wird die Konfiguration in einer Datei im Verzeichnis /etc/sysconfig abgelegt, nämlich in apache2. Dort setzen Sie in der Direktive
APACHE_CONF_INCLUDE_FILES=
"/home/superx/webserver/tomcat/conf/superx_mod_jk.conf /etc/apache2/vhosts.d/myhost-ssl.conf"

die Tomcat-Anbindung und den Virtuellen SSL-Host. Letzteren konfigurieren Sie am besten, indem Sie die Vorlage /etc/apache2/vhosts.d/vhost-ssl.template kopieren, z.b. wie oben nach myhost-ssl.conf.
Weiter unten in /etc/sysconfig/apache2 setzen Sie die Direktive
APACHE_SERVER_FLAGS="SSL"
Damit werden in verschiedenen anderen conf-Dateien die Abfragen <ifDefine SSL> positiv aufgelöst und die jeweiligen Direktiven darin werden aktiviert.
Nach dem Ändern der Datei
/etc/sysconfig/apache2 müssen Sie als User root das Script SuSEconfig ausführen.

Bei anderen Linux-Distributionen entfällt die sysconfig.  Auch unabhängig von der Distribution wird beim Apache2  nicht mehr die gesamte Konfiguration in einer großen httpd.conf gesammelt, sondern  in separaten conf-Dateien. Bei virtuellen Hosts zum Beispiel befinden sich die Konfigurationen in Dateien mit der Endung *.conf im Verzeichnis vhosts.d. Der Startpunkt ist aber immer die httpd.conf (standardmäßig in /etc/apache2).

Wenn Sie keine Virtual Hosts nutzen, dann können Sie den Abschnitt, der im Konfigurationsbeispiel /etc/apache2/vhosts.d/vhost-ssl.template beschrieben ist auch in der Datei /etc/apache2/default-server.conf einfügen:

/etc/apache2/
default-server.conf

##
## SSL Virtual Host Context
##

<VirtualHost _default_:443>

        #  General setup for the virtual host
        DocumentRoot "/srv/www/htdocs"
        ServerName 192.168.0.108:443
        #ServerAdmin webmaster@example.com
        ErrorLog /var/log/apache2/error_log
        TransferLog /var/log/apache2/access_log

        #   SSL Engine Switch:
        #   Enable/Disable SSL for this virtual host.
        SSLEngine on

        #   SSL Cipher Suite:
        #   List the ciphers that the client is permitted to negotiate.
        #   See the mod_ssl documentation for a complete list.
        SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
:+eNULL

        #   Server Certificate:
        #   Point SSLCertificateFile at a PEM encoded certificate.  If
        #   the certificate is encrypted, then you will be prompted for a
        #   pass phrase.  Note that a kill -HUP will prompt again.  Keep
        #   in mind that if you have both an RSA and a DSA certificate you
        #   can configure both in parallel (to also allow the use of DSA
        #   ciphers, etc.)
        SSLCertificateFile /root/demoCA/cacert.pem
        #SSLCertificateFile /etc/apache2/ssl.crt/server.crt
        #SSLCertificateFile /etc/apache2/ssl.crt/server-dsa.crt

        #   Server Private Key:
        #   If the key is not combined with the certificate, use this
        #   directive to point at the key file.  Keep in mind that if
        #   you've both a RSA and a DSA private key you can configure
        #   both in parallel (to also allow the use of DSA ciphers, etc.)
        SSLCertificateKeyFile /root/demoCA/private/cakey.pem
        #SSLCertificateKeyFile /etc/apache2/ssl.key/server.key
        #SSLCertificateKeyFile /etc/apache2/ssl.key/server-dsa.key
...

 

Danach müssen Sie in /etc/sysconfig/apache2 die Systemvariable HTTPD_START_TIMEOUT auf einen sinnvollen Wert setzen, z.B. 10. Danach wie immer SuSEconfig ausführen.

Sie haben dann beim Start des Apache 10 Sek. Zeit, dass CA-Passwort einzugeben.

Wenn sie wünschen, dass der Apache beim Booten ohne Passwort-Abfrage startet, dann müssen Sie das CA-Passwort löschen und die Leserechte für den privaten Schlüssel ändern (nur root und der Apache-Daemon haben Leserecht)[17]. Dies ist allerdings ein Sicherheitsrisiko; der Server wird leichter kompromittierbar, wenn ein Hacker auf den Rechner kommt und die Datei lesen kann, kann er den Schlüssel missbrauchen. Unserer Erfahrung nach ist aber nur dieser Weg gangbar, denn bei einem Reboot nach Stromausfall würde der gesamte Webserver sonst nicht laufen!

Wir geben als root im Verzeichnis /root/demoCA/private ein:

openssl rsa -in cakey.pem -out cakey2.pem

(1x mit der Passphrase bestätigen).

Dann wird ein Schlüssel ohne Passphrase erzeugt. Wenn wir diesen dann wiederum in /etc/httpd/httpd.conf eintragen:

  #SSLCertificateKeyFile /root/demoCA/private/cakey.pem

  SSLCertificateKeyFile /root/demoCA/private/cakey2.pem

Dann startet der Apache ohne Passwortabfrage. In diesem Fall kann man auch die Variable HTTPD_START_TIMEOUT auf 1 zurücksetzen.

 

Wenn Sie Ihren Besuchern das öffentliche CA-Zertifikat zum Download anbieten möchten, müssen Sie dieses zuerst in das entsprechende DER-Format konvertieren:

openssl x509 -in demoCA/cacert.pem -out capub.crt -outform DER

Es wird die Datei /root/capub.crt erzeugt. Auf diese Datei wird in der Apache-Variable SSLCertificateFile  verwiesen (statt wie oben auf /root/demoCA/cacert.pem)

 

 

#   Server Certificate:
        #   Point SSLCertificateFile at a PEM encoded certificate.  If
        #   the certificate is encrypted, then you will be prompted for a
        #   pass phrase.  Note that a kill -HUP will prompt again.  Keep
        #   in mind that if you have both an RSA and a DSA certificate you
        #   can configure both in parallel (to also allow the use of DSA
        #   ciphers, etc.)
        SSLCertificateFile /root/capub.crt
        #SSLCertificateFile /etc/apache2/ssl.crt/server.crt
        #SSLCertificateFile /etc/apache2/ssl.crt/server-dsa.crt

 

Wenn Sie Ihr Zertifikat bei einer Zertifizierungstelle signieren lassen möchten, müssen Sie die Zertifizierungsanfrage erzeugen. Mit
/usr/share/ssl/misc/CA.sh -newreq
erzeugen Sie ein neues Zertifikat, das Passwort sollte auf keinem Fall dem obigen Server-Zertifikat entsprechen.

Danach müssen Sie die Datei newreq.pem mit folgendem Befehl in eine separate Datei speichern. Senden Sie auf gar keinen Fall die Datei newreq.pem zur Zertifizierungsstelle, da diese zusätzlich Ihren privaten Schlüssel enthält.

openssl req -text -in newreq.pem -out request.pem

Wie und in welchem Format Sie die Anfrage an die von Ihnen ausgewählte Zertifizierungsstelle senden müssen, erfahren Sie von der entsprechenden Zertifizierungsstelle.

Mit dem weiter oben erstellten CA-Zertifikat können Sie Ihr http-Zertifikat folgendermaßen selbst signieren:

/usr/share/ssl/misc/CA.sh -sign

Es wird eine Datei newcert.pem erzeugt. Nachdem Sie nun ein signiertes Zertifikat für Ihre Anwendung erstellt haben, müssen Sie dieses nur noch in das entsprechende Verzeichnis kopieren und in der Konfigurationsdatei eintragen. Der Apache erwartet den privaten Schlüssel in einer separaten Datei, in solchen Fällen können Sie den privaten Schlüssel wie folgt extrahieren

openssl rsa -in newreq.pem -out newkey.pem

Zur Superx-Homepage SuperX ist auch ein CampusSource-Projekt. Zur CampusSource-Homepage | Powered by FreeMarker Seite 77 / 277
Letzter Update: 18.08.2008
Impressum